A host machine (e.g., computer or server) is typically enabled to simultaneously run one or more virtual machines using a software application known as a hypervisor. The hypervisor allocates portions of the host machine's resources to each of the virtual machines. The hypervisor virtualizes the underlying hardware of the host machine or emulates hardware devices, making the use of the virtual machine transparent to a local or remote client that uses the virtual machine. Typically, a hypervisor manages allocation and virtualization of computer resources and performs context switching, as may be necessary, to cycle between various virtual machines, such that many virtual machines may be run simultaneously.
A virtual machine is a portion of software that provides an environment allowing the virtualization of a physical computer system. Each virtual machine may function as a self-contained platform, running applications and its own operating system that is referred to as a guest or guest operating system. Guests may be accessed by clients to perform computing tasks.
Conventionally, a virtual machine running on a host machine may be migrated for reasons such as workload balancing and error recovery. A conventional migration may include a pre-copy migration, in which a hypervisor scans and copies memory corresponding to a virtual machine, which may be performed while the virtual machine is running. However, during the migration, any copied memory of the virtual machine that is modified may have to be re-copied so that the modifications may be captured at the destination. The additional copying (which may include transmitting the copied memory over a network) may cause significant slowdowns in the migration—sometimes to the extent that the migration is unable to be completed. Thus, while conventional virtual machine techniques have been generally adequate, limitations remain.